package com.lh.java.util;

import java.io.IOException;
import java.io.OutputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Random;

import javax.servlet.http.HttpServletResponse;

import com.lh.java.basic.date.StringUtils;


/**
*****************************************************************************
** Module : 常用方法
** 
** Date:  2011-12-6 Time:  下午03:03:17
** 
** Author: 李恒 (liheng)
** 
** (C) Copyright 2011 广州赢典信息科技有限公司
*****************************************************************************

 */
public class CommonMethodUtil {
	/**
	 * 发送协议到客户端
	 * 
	 * @param protocol
	 * @param response
	 * @Author: seara
	 */
	public static void sendData(String protocol, HttpServletResponse response) throws IOException {	
		OutputStream out = null;
		try {
			out = response.getOutputStream();
			out.write(protocol.getBytes("utf-8"));
			out.flush();
		} catch (IOException e) {
			throw e;
		} finally {
			try {
				if (out != null) {
					out.close();
				}
			} catch (IOException e) {
				throw e;
			}
		}
	}
    /**判断某个字符串是否为数字
     * @param s
     * @return
     * @Author: liheng
     */
    public static boolean isNumber(String s){    	
    	if(!isEmpty(s)){//如果传进来的参数为空
    		String reg="[1-9][0-9]*";    		
    		if(s.matches(reg)){//判断字符串是否为数字
    			return true;
    		}else{
    			return false;
    		}
    	}else{
    		return false;
    	}
    	
    }
    /**解释得到的参数为整型
     * @param s
     * @return
     * @throws Exception 
     * @Author: liheng
     */
    public static Integer parseParameterToInt(String s) throws Exception{
    	Integer result=null;
    	if(!isEmpty(s)){
    		String tempString=decryptString(s);//解密字符串
    		if(isNumber(tempString)){//如果能转换
        		result=new Integer(tempString);
        	}
    	}
    	return result;
    }
    /**字符是否为空   这里不存在，或者为空串也是代表空
     * @param s
     * @Author: liheng
     */
    public static boolean isEmpty(String s){
    	if(null!=s&&!"".equalsIgnoreCase(s)){//不为空
    		return false;
    	}else{//为空
    		return true;
    	}
    }
    /**对加密过的数据进行解密
     * @param s
     * @return
     * @throws Exception 
     * @Author: liheng
     */
    public static String decryptString(String s) throws Exception{
    	String result=null;
    	if(!isEmpty(s)){
    		DESPlus des =DESPlus.getDESPlusInstance();
    		result=des.decrypt(s);
    		return result;
    	}
    	return result;    	
    }
    /**
	 * 获取指定范围内的随机数
	 * 
	 * @param type
	 * @return
	 * @Author: liheng
	 */
	public static int getRandomNumber(Integer number) {		
		if(null==number){//判断是否为空
			return CommonMethodUtil.getRandomNumber();
		}else{
			Random r = new Random();
			return r.nextInt(number.intValue());
		}		
	}
	/**获取随机数
	 * @return
	 * @Author: liheng
	 */
	public static int getRandomNumber() {
		Random r = new Random();
		return r.nextInt();
	}
	
    /**从List<Integer>里随机取得一个值
     * @param integerList
     * @return
     * @Author: liheng
     */
    public static Integer getIDByRandom(List<Integer> integerList){
    	Integer integerResult=null;
    	if(null!=integerList&&integerList.size()>0){//检查数组是否为空
    		int listLength=integerList.size();
    		if(listLength>1){//如果长度大于1,随机取一个
    			integerResult=getRandomNumber(listLength);
			}else{//长度等于1，就取出这一个
				integerResult=integerList.get(0);	
			}
    	}
    	return integerResult;
    }
    
    /**将表名放到tableName里面并查询条件里面
     * @param value 
     * @return
     * @Author: liheng
     */
	public static Map<String, Object> putTableNameAsParame(Map<String, Object> map,String tableName){
		String tmpTabeName=(String) map.get("tableName");//查看有没有这个字段
		boolean isHasTableName=isEmpty(tmpTabeName);
		if(!isHasTableName){//存在,从MAP里面移除
			map.remove("tableName");
		}
		map.put("tableName", tableName);	
		return map;    
    } 
	  
    /**将时间插入到表里面放到里面
     * @param value 
     * @return
     * @Author: liheng
     */
	public static Map<String, Object> putCreateTimeAsParame(Map<String, Object> map){		
		Date tmpTabeName=(Date) map.get("createDateTime");//查看有没有这个字段		
		if(null!=tmpTabeName){//存在,从MAP里面移除
			map.remove("createDateTime");
		}
		Date nowDateTime=new Date();
		map.put("createDateTime", nowDateTime);		
		return map;    
    } 
	
	
	/**判断List数能是否为空
	 * @param targetList
	 * @return
	 * @Author: liheng
	 */
	@SuppressWarnings("rawtypes")
	public static boolean isListNull(List targetList){
		if(null==targetList||targetList.size()<1){
			return true;
		}else{
			return false;
		}		
	}
	/**
	 * 获取时间为23:59:59的日期
	 * 
	 * @param date
	 * @return
	 * @Author: seara
	 */
	public static Date getDate23_59_59(Date date) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 23:59:59");
		return getDateByStr(sdf.format(date));
	}
	/**
	 * 根据时间字符串返回Date对象
	 * 
	 * @param dateStr
	 *            ,可以接受3种格式分别是:yyyy-MM-dd,yyyy-MM-dd HH:mm,yyyy-MM-dd HH:mm:ss
	 * @return
	 */

	public static Date getDateByStr(String dateStr) {
		if (StringUtils.isNotBlank(dateStr)) {
			SimpleDateFormat formatter = null;
			if (dateStr.length() == 10)
				formatter = new SimpleDateFormat("yyyy-MM-dd");
			else if (dateStr.length() == 16)
				formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm");
			else if (dateStr.length() == 19)
				formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			else {
				return null;
			}
			try {
				return formatter.parse(dateStr);
			} catch (ParseException e) {
				return null;
			}
		}
		return null;
	}
	/**
	 * 获取时间为00:00:00的日期
	 * 
	 * @param date
	 * @return
	 * @Author: seara
	 */
	public static Date getDate00_00_00(Date date) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
		return getDateByStr(sdf.format(date));
	}
	/**得到字符串
	 * @return
	 * @Author: liheng
	 */
	public static String getString(String s){
		String temp="";		
		if(null!=s){
			if(s.length()>0){
				temp=s.trim();
			}
		}
		return temp;
	}
}
